package leetcode;

import java.lang.Math;
import java.util.HashMap;

public class Q2461 {
    public long maximumSubarraySum(int[] nums, int k) {
        long res = 0, sum = 0;
        int n = nums.length;
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

        for (int i = 0; i < k; i++) {
            sum += nums[i];
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }

        if (map.size() == k) {
            res = Math.max(res, sum);
        }

        for (int i = k; i < n; i++) {
            sum += nums[i];
            sum -= nums[i - k];
            if (map.getOrDefault(nums[i - k], 0) == 1) {
                map.remove(nums[i - k]);
            } else {
                map.put(nums[i - k], map.getOrDefault(nums[i - k], 0) - 1);
            }

            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);

            if (map.size() == k) {
                res = Math.max(res, sum);
            }
        }

        return res;
    }

    public static void main(String[] args) {
        Q2461 sl = new Q2461();
        int[] nums = {1, 5, 4, 2, 9, 9, 9};
        int k = 3;
        System.out.println(sl.maximumSubarraySum(nums, k));
    }
}